package servlets;

import java.io.IOException;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dominio.Sistema;


import entities.*;

/**
 * Servlet implementation class ProcesarDatos
 */
public class ProcesarDatosServletCliente extends HttpServlet {

	private static final long serialVersionUID = 1L;


	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ProcesarDatosServletCliente() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		if (request.getParameter("accion").equals("Cancelar")) {
			response.sendRedirect("MenuPrincipal.jsp");
		}

		if (request.getParameter("accion").equals("Volver")) {
			response.sendRedirect("MenuPrincipal.jsp");
		}

		if (request.getParameter("accion").equals("Agregar Cliente")) {
			Cliente c = new Cliente();
			c.setNombre(request.getParameter("nombre"));
			c.setApellido(request.getParameter("apellido"));
			c.setNroDoc(Integer.parseInt(request.getParameter("nroDoc")));
			if (request.getParameter("sexo") != null) {
				if (request.getParameter("sexo").equals("Femenino")) {
					c.setSexo("Feminino");
				} else
					c.setSexo("Masculino");
			}
			SimpleDateFormat d = new SimpleDateFormat("dd-MM-yyyy");
			try {
				c.setFechaNacimiento(d.parse(request.getParameter("fechaNac")));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			c.setDomicilio(request.getParameter("domicilio"));
			c.setTelefono(request.getParameter("telefono"));
			c.setNroObraSocial(Integer.parseInt(request
					.getParameter("obraSocial")));

			//System.out.println("Busco doc");
			//System.out.println((Sistema.getInstancia().buscarClienteDoc(Integer.parseInt(request.getParameter("nroDoc")))).getNombre());
			
			if (Sistema.getInstancia().existeCliente(Integer.parseInt(request.getParameter("nroDoc"))) == false){
				Sistema.getInstancia().agregarCliente(c);
				RequestDispatcher rd = request
				.getRequestDispatcher("NuevoCliente.jsp?msg="
						+ "El cliente fue agregado exitosamente");
				rd.forward(request, response);
			} else {
				RequestDispatcher rd = request
				.getRequestDispatcher("NuevoCliente.jsp?msg="
						+ "El cliente ya existe");
				rd.forward(request, response);
			}
		}

		if (request.getParameter("accion").equals("Buscar Cliente")) {
			Cliente cli = new Cliente();
			List <Cliente> c2 = Sistema.getInstancia().getClientes();

			if (request.getParameter("pagina").equals("buscarModificar")) {

				if (c2 == null) {
					request.getRequestDispatcher(
							"BuscarCliente.jsp?msg=" + "No existen clientes")
							.forward(request, response);
				} else {
					for (Cliente cc : c2) {
						if (cc.getNroDoc() == Integer.parseInt(request
								.getParameter("nroCliente"))) {
							cli = cc;
						}
					}
					if (cli.getNroDoc() == Integer.parseInt(request
							.getParameter("nroCliente"))) {
						request.setAttribute("cliente", cli);
						request.getRequestDispatcher("ModificarCliente.jsp")
								.forward(request, response);
					} else {
						request.getRequestDispatcher(
								"BuscarCliente.jsp?msg="
										+ "El cliente no existe").forward(
								request, response);
					}
				}
			}

			if (request.getParameter("pagina").equals("buscarEliminar")) {
				
				if (c2 == null) {
					request.getRequestDispatcher(
							"BuscarCliente2.jsp?msg=" + "No existen clientes")
							.forward(request, response);
				} else {
					for (Cliente cc : c2) {
						if (cc.getNroDoc() == Integer.parseInt(request
								.getParameter("nroCliente"))) {
							cli = cc;
						}
					}
					if (cli.getNroDoc() == Integer.parseInt(request
							.getParameter("nroCliente"))) {
						request.setAttribute("cliente", cli);
						request.getRequestDispatcher("EliminarCliente.jsp")
								.forward(request, response);
					} else {
						request.getRequestDispatcher(
								"BuscarCliente2.jsp?msg="
										+ "El cliente no existe").forward(
								request, response);
					}
				}
			}

			if (request.getParameter("pagina").equals("buscarDF")) {
				/*
				List <DatosFisicos> dfsb = Sistema2.getDatosFisicosClientes();
				if (dfsb == null) {
					dfsb = new ArrayList();
				}
				 */
				if (c2 == null) {
					request.getRequestDispatcher(
							"BuscarClienteDF.jsp?msg=" + "No existen clientes")
							.forward(request, response);
				} else {
					/*
					for (Cliente cc : c2) {
						if (cc.getNroDoc() == Integer.parseInt(request
								.getParameter("nroCliente"))) {
							boolean matchDF = false;
							for (DatosFisicos dfu : dfsb) {
								if (dfu.getCliente().getNroDoc() == Integer
										.parseInt(request
												.getParameter("nroCliente"))) {
									matchDF = true;*/
					System.out.println("NroDoc de la pagina: "+request.getParameter("nroCliente"));
					Cliente cdf = Sistema.getInstancia().buscarClienteDoc(Integer.parseInt(request.getParameter("nroCliente")));

					if (cdf == null){
						request.getRequestDispatcher("BuscarClienteDF.jsp?msg="
										+ "El cliente no existe").forward(request, response);
					} else {
						if (Sistema.getInstancia().existeDFCliente(cdf.getNroDoc()) == true){
							DatosFisicos df = Sistema.getInstancia().buscarUltimoDFporDoc(cdf.getNroDoc());
								request.setAttribute("datos", df);
								request.getRequestDispatcher("ModificarDF.jsp").forward(request,response);
						}else {
							request.setAttribute("cliente",cdf);
							request.getRequestDispatcher("NuevosDF.jsp")
										.forward(request, response);
						}
					}
				}
			}
		}

		if (request.getParameter("accion").equals("Modificar Cliente")) {
			Cliente c = new Cliente();
			c.setNombre(request.getParameter("nombre"));
			c.setApellido(request.getParameter("apellido"));
			c.setNroDoc(Integer.parseInt(request.getParameter("nroDoc")));
			if (request.getParameter("sexo") != null) {
				if (request.getParameter("sexo").equals("Femenino")) {
					c.setSexo("Feminino");
				} else
					c.setSexo("Masculino");
			}
			SimpleDateFormat d = new SimpleDateFormat("dd-MM-yyyy");
			try {
				c.setFechaNacimiento(d.parse(request.getParameter("fechaNac")));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			c.setDomicilio(request.getParameter("domicilio"));
			c.setTelefono(request.getParameter("telefono"));
			c.setNroObraSocial(Integer.parseInt(request
					.getParameter("obraSocial")));

			Sistema.getInstancia().actualizarCliente(c);
			request.setAttribute("cliente", c);
			RequestDispatcher rd = request
					.getRequestDispatcher("ModificarCliente.jsp?msg="
							+ "El cliente fue modificado exitosamente");
			rd.forward(request, response);

		}

		if (request.getParameter("accion").equals("Eliminar Cliente")) {
			List <Cliente> c3 = Sistema.getInstancia().getClientes();
			int doc = Integer.parseInt(request.getParameter("nroDoc"));
			for (int i = 0; i < c3.size(); i++) {
				Cliente cl = (Cliente) c3.get(i);
				if (cl.getNroDoc() == doc) {
					request.setAttribute("cliente", cl);
					Sistema.getInstancia().eliminarCliente(cl);
				}
			}
			
			RequestDispatcher rd = request
					.getRequestDispatcher("EliminarCliente.jsp?msg="
							+ "El cliente fue eliminado exitosamente");
			rd.forward(request, response);

		}

		if (request.getParameter("accion").equals("Agregar DF")) {
			DatosFisicos df = new DatosFisicos();
			df.setAltura(Integer.parseInt(request.getParameter("altura")));
			df.setPeso(Integer.parseInt(request.getParameter("peso")));
			if (request.getParameter("ef") != null) {
				if (request.getParameter("ef").equals("Excelente")) {
					df.setEstadoFisico("Excelente");
				} else {
					if (request.getParameter("ef").equals("MuyBueno")) {
						df.setEstadoFisico("Muy Bueno");
					} else {
						if (request.getParameter("ef").equals("Bueno")) {
							df.setEstadoFisico("Bueno");
						} else {
							if (request.getParameter("ef").equals("Regular")) {
								df.setEstadoFisico("Regular");
							} else {
								if (request.getParameter("ef").equals(
										"SinEstado")) {
									df.setEstadoFisico("Sin Estado");
								}
							}
						}
					}
				}
			}
			if (request.getParameter("obj") != null) {
				if (request.getParameter("obj").equals("Tonificar")) {
					df.setObjetivo("Tonificar");
				} else {
					if (request.getParameter("obj").equals("Adelgazar")) {
						df.setObjetivo("Adelgazar");
					} /*
					 * else { if (request.getParameter("ef").equals("Bueno")){
					 * df.setEstadoFisico("Bueno"); } else { if
					 * (request.getParameter("ef").equals("Regular")){
					 * df.setEstadoFisico("Regular"); } else { if
					 * (request.getParameter("ef").equals("SinEstado")){
					 * df.setEstadoFisico("SinEstado"); } } } }
					 */
				}
			}
			df.setDiasEntrenar(Integer.parseInt(request
					.getParameter("diasEntrenamiento")));
			df.setIndiceMasaCorporal(Integer.parseInt(request
					.getParameter("imc")));
			df.setAntMedico(request.getParameter("antMed"));
			
			Date fecha = new Date();
			java.sql.Date fechaSQL = new java.sql.Date(fecha.getTime());
			df.setFecha(fechaSQL);
			df.setCliente(Sistema.getInstancia().buscarClienteDoc(Integer.parseInt(request
					.getParameter("nroDoc"))));

			/*List <DatosFisicos> dfs = Sistema2.getDatosFisicosClientes();
			if (dfs == null) {
				dfs = new ArrayList();
				dfs.add(df);
			} else {
				dfs.add(df);
			}
			Sistema2.setDatosFisicosClientes(dfs);
			*/
			Sistema.getInstancia().agregarDFCliente(df);
			request.setAttribute("datos", df);
			RequestDispatcher rd = request
					.getRequestDispatcher("ModificarDF.jsp?msg="
							+ "Los datos fisicos del cliente fueron agregados exitosamente");
			rd.forward(request, response);
		}
		
		if (request.getParameter("accion").equals("Modificar DF")) {
			DatosFisicos dfc = new DatosFisicos();
			//dfc = Sistema2.buscarDFdeClientePorDoc(Integer.parseInt(request.getParameter("nroDoc")));
			
			dfc.setAltura(Integer.parseInt(request.getParameter("altura")));
			dfc.setPeso(Integer.parseInt(request.getParameter("peso")));
			if (request.getParameter("ef") != null) {
				if (request.getParameter("ef").equals("Excelente")) {
					dfc.setEstadoFisico("Excelente");
				} else {
					if (request.getParameter("ef").equals("MuyBueno")) {
						dfc.setEstadoFisico("Muy Bueno");
					} else {
						if (request.getParameter("ef").equals("Bueno")) {
							dfc.setEstadoFisico("Bueno");
						} else {
							if (request.getParameter("ef").equals("Regular")) {
								dfc.setEstadoFisico("Regular");
							} else {
								if (request.getParameter("ef").equals(
										"SinEstado")) {
									dfc.setEstadoFisico("Sin Estado");
								}
							}
						}
					}
				}
			}
			if (request.getParameter("obj") != null) {
				if (request.getParameter("obj").equals("Tonificar")) {
					dfc.setObjetivo("Tonificar");
				} else {
					if (request.getParameter("obj").equals("Adelgazar")) {
						dfc.setObjetivo("Adelgazar");
					} /*
					 * else { if (request.getParameter("ef").equals("Bueno")){
					 * dfc.setEstadoFisico("Bueno"); } else { if
					 * (request.getParameter("ef").equals("Regular")){
					 * dfc.setEstadoFisico("Regular"); } else { if
					 * (request.getParameter("ef").equals("SinEstado")){
					 * dfc.setEstadoFisico("SinEstado"); } } } }
					 */
				}
			}
			dfc.setDiasEntrenar(Integer.parseInt(request.getParameter("diasEntrenamiento")));
			dfc.setIndiceMasaCorporal(Integer.parseInt(request.getParameter("imc")));
			dfc.setAntMedico(request.getParameter("antMed"));
			Date fecha = new Date();
			java.sql.Date fechaSQL = new java.sql.Date(fecha.getTime());
			dfc.setFecha(fechaSQL);
			//dfc.setCliente(Sistema.buscarClienteDoc(Integer.parseInt(request.getParameter("nroDoc"))));
			//Sistema2.actualizarDFdeCliente(dfc);
			dfc.setCliente(Sistema.getInstancia().buscarClienteDoc(Integer.parseInt(request.getParameter("nroDoc"))));
			Sistema.getInstancia().agregarDFCliente(dfc);
			
			request.setAttribute("datos", dfc);
			RequestDispatcher rd = request
					.getRequestDispatcher("ModificarDF.jsp?msg="
							+ "Los datos fisicos del cliente fueron modificados exitosamente");
			rd.forward(request, response);
		}
		
		if (request.getParameter("accion").equals("Registrar Pago")) {
			Cliente cp = new Cliente();
			cp = Sistema2.buscarClienteDoc(Integer.parseInt((request.getParameter("nroDoc"))));
			if (cp.getNroDoc() == 0){
				RequestDispatcher rd = request.getRequestDispatcher("RegPago.jsp?msg="
						+ "El cliente no existe");
				rd.forward(request, response);
			} else {
				CuotaPaga cuota = new CuotaPaga ();
				cuota.setCliente(cp);				
				SimpleDateFormat dff = new SimpleDateFormat("dd-MM-yyyy");
				try {
					cuota.setFechaVencimiento((java.sql.Date) dff.parse(request.getParameter("fechaVenc")));
					cuota.setFechaPago((java.sql.Date)dff.parse(request.getParameter("fechaPago")));
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				cuota.setMonto(Float.parseFloat(request.getParameter("monto")));
				boolean b = Sistema2.verificarPago(cuota);
				if (b == true){
					RequestDispatcher rd = request.getRequestDispatcher("RegPago.jsp?msg="
							+ "El pago ya esta registrado");
					rd.forward(request, response);
				} else {
					Sistema2.actualizarPagos(cuota);
					RequestDispatcher rd = request.getRequestDispatcher("RegPago.jsp?msg="
							+ "El pago fue registrado exitosamente");
					rd.forward(request, response);
				}
			}
		}
	}

}
